package com.example.demo.util;

import java.io.*;

/**
 * @Classname FileUtil
 * @Description 根据byte数组生成文件
 * @Date 2019/12/26 11:26
 * @Created by yby
 */
public class FileUtil {

    /**
     * 根据byte数组，生成文件
     * filePath  文件路径
     * fileName  文件名称（需要带后缀，如*.jpg、*.java、*.xml）
     */
    public static void getFile(byte[] bfile, String filePath,String fileName) {
        BufferedOutputStream bos = null;
        FileOutputStream fos = null;
        File file = null;
        try {
            File dir = new File(filePath);
            if(!dir.exists() && !dir.isDirectory()){//判断文件目录是否存在
                dir.mkdirs();
            }
            file = new File(filePath + File.separator + fileName);
            fos = new FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(bfile);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }

    /**
     * 字节数组写出到新的文件
     *1、字节数组读入程序中
     *                    源：传入的字节数组
     *                    流：ByteInputStream
     *                    操作：读入
     *                    释放资源：不需要
     *2、程序写出到新的文件中
     *                    源：传入的新文件目的地
     *                    流：OutputStream FileOutputStream
     *                    操作：写出
     *                    释放资源：需要
     * @param src
     * @param filePath
     */
    public static void byteArrayToFile(byte[] src,String filePath) {
        //创建源
        File dest = new File(filePath);//目的地，新文件
        //src字节数组已经存在
        //选择流
        InputStream is = null;//ByteArrayInputStream的父类
        OutputStream os = null;
        //操作
        try {
            is = new ByteArrayInputStream(src);//字节数组与程序之间的管道
            os = new FileOutputStream(dest);//程序与新文件之间的管道
            //一样的字节数组缓冲操作
            byte[] flush = new byte[src.length];
            int len = -1;
            while((len = is.read(flush)) != -1) {
                os.write(flush,0,len);
            }
            os.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(null != os) {//关闭文件流
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
